export default {
  //开启命名空间
  namespaced:true,
  state:()=>({
     // 购物车的数组，用来存储购物车中每个商品的信息对象
        // 每个商品的信息对象，都包含如下 6 个属性：
        // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
        //从本地存储中获取购物车数据   没有就是[]
     cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  }),
  mutations:{
    addToCart(state,goods) {
    //先看cart里面有没有那件商品find查找    找到了相同的会返回那个信息对象
     const findResult = state.cart.find(x=>x.goods_id===goods.goods_id)
     // console.log(findResult)
     //如果没找到那么就是undefind取非往里面添加
     if(!findResult) {
       state.cart.push(goods)
     } else {
       //如果找到了就把商品数量+1
       findResult.goods_count++
     }
     // console.log(state.cart)
     this.commit('m_cart/saveToStorage')
    },
    //修改购物车选中状态的方法
    updateGoodsState(state,goods){
      //先找购物车里有没有这个商品
     const findResult = state.cart.find(x=>x.goods_id===goods.goods_id)
     if(findResult){
       //找到了就把传送过来的goods.goods_state赋值给findResult.goods_state
     findResult.goods_state=goods.goods_state
     }
     this.commit('m_cart/saveToStorage')
    },
    //更新购物车商品的数量
    updateGoodsCount(state,goods){
         const findResult=state.cart.find(x=>x.goods_id===goods.goods_id)
         if(findResult) {
           findResult.goods_count =goods.goods_count
         }
     this.commit('m_cart/saveToStorage')
    },
    //删除购物车商品的方法
    removeGoodsById(state,goods) {
      // 将cart里面的不等于选中id的数据筛选出来重新赋值给state.cart
      state.cart = state.cart.filter(x=>x.goods_id!==goods.goods_id)
      this.commit('m_cart/saveToStorage')
    },
    //将购物车中的数据持久化到本地存储
    saveToStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    //更新所有商品的勾选状态
    updateAllGoodsState(state,newState){
      //为购物车里所有的商品状态重新赋值为newState   newState是传过来的布尔值
        state.cart.forEach(x=>x.goods_state=newState)
        //存储到本地持久化
        this.commit('m_cart/saveToStorage')
    }
  },
  getters:{
    //统计购物车的总数量
    total(state) {
      // let c=0
      // //循环统计商品的数量 累加到c里面
      // state.cart.forEach(goods => c += goods.goods_count)
      // //记得  return c
      // return c
    return  state.cart.reduce((total,item)=>total+=item.goods_count,0)
    },
   // 勾选的商品的总数量
   checkedCount(state){
     //先筛选出来选中的  再用reduce计算总数 total表示总数  0表示起始值  
      // 再使用 reduce 方法，将已勾选的商品总数量进行累加
       // reduce() 的返回值就是已勾选的商品的总数量
     return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count,0)
   },
   //动态计算以勾选商品的总价格
   checkedGoodsAmount(state){
     //先筛选出来被选中的商品  再用reduce的total累加被选中的那一项乘以单价  结果保留两位小数
     return state.cart.filter(x=>x.goods_state)
     .reduce((total,item)=>total+=item.goods_count*item.goods_price,0)
     .toFixed(2)
   }
  },
}